-- Copyright 2016 The Cartographer Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--      http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

-- /* Author: Darby Lim */

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,                         -- 地图构建器配置
  trajectory_builder = TRAJECTORY_BUILDER,           -- 轨迹构建器配置
  map_frame = "map",                                 -- 地图坐标系名称
  tracking_frame = "base_link",                      -- 被跟踪的机器人坐标系
  published_frame = "base_link",                     -- 发布的坐标系名称
  odom_frame = "odom",                               -- 里程计坐标系名称
  provide_odom_frame = true,                         -- 由Cartographer提供里程计坐标系
  publish_frame_projected_to_2d = true,              -- 是否将发布的坐标系投影到2D平面
  use_odometry = false,                              -- 不使用外部里程计数据
  use_nav_sat = false,                               -- 是否使用卫星导航数据
  use_landmarks = false,                             -- 是否使用地标数据
  num_laser_scans = 1,                               -- 使用的激光扫描仪数量
  num_multi_echo_laser_scans = 0,                    -- 使用的多回波激光扫描仪数量
  num_subdivisions_per_laser_scan = 1,               -- 每次激光扫描的细分数量
  num_point_clouds = 0,                              -- 使用的点云数据源数量
  lookup_transform_timeout_sec = 0.2,                -- 查找坐标变换的超时时间(秒)
  submap_publish_period_sec = 0.3,                   -- 子地图发布周期(秒)
  pose_publish_period_sec = 5e-3,                    -- 位姿发布周期(秒)
  trajectory_publish_period_sec = 30e-3,             -- 轨迹发布周期(秒)
  rangefinder_sampling_ratio = 1.,                   -- 测距仪数据采样率
  odometry_sampling_ratio = 1.,                      -- 里程计数据采样率
  fixed_frame_pose_sampling_ratio = 1.,              -- 固定坐标系位姿数据采样率
  imu_sampling_ratio = 0.0,                          -- IMU数据采样率（设为1.0启用IMU）
  landmarks_sampling_ratio = 1.,                     -- 地标数据采样率
}

MAP_BUILDER.use_trajectory_builder_2d = true         -- 是否使用2D轨迹构建器

TRAJECTORY_BUILDER_2D.min_range = 0.3               -- 激光有效的最小距离范围(米)
TRAJECTORY_BUILDER_2D.max_range = 3                -- 激光有效的最大距离范围(米)
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 3.   -- 缺失数据射线长度(米)
TRAJECTORY_BUILDER_2D.use_imu_data = false            -- 是否使用IMU数据（启用IMU）
TRAJECTORY_BUILDER_2D.imu_gravity_time_constant = 10. -- IMU重力时间常数（值越大，IMU影响越小，默认10）
-- TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 2
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true -- 是否使用在线相关扫描匹配
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1 -- 线性搜索窗口
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.angular_search_window = math.rad(20.) -- 角度搜索窗口
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10. -- 平移代价权重
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1 -- 旋转代价权重（降低旋转权重）
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1) -- 运动过滤器的最大角度阈值(弧度)

POSE_GRAPH.optimize_every_n_nodes = 15
POSE_GRAPH.constraint_builder.min_score = 0.65       -- 约束构建器的最低得分阈值
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7 -- 全局定位的最低得分阈值

-- POSE_GRAPH.optimize_every_n_nodes = 0

return options
